home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland C++ V5.02 / APPEXPRT.PAK / TMDICLIE.OWL < prev    next >
Text File  |  1997-05-06  |  18KB  |  576 lines

  1. '----------------------------------------------------------------------------
  2. '   Expert - (C) Copyright 1993, 1995 by Borland International, Inc.
  3. '                All Rights Reserved.
  4. '
  5. '   SUBSYSTEM:    OWL code template
  6. '   FILE:         TMDIClient.OWL
  7. '
  8. '
  9. '   OVERVIEW
  10. '   ~~~~~~~~
  11. '   Definition of all OWL classes when can be generated by  the CODEGEN phase of
  12. '   AppGen and ClassExpert.  AppGen generates when all options have been selected
  13. '   and multiple classes are generated.  ClassExpert uses the CODEGEN phase when
  14. '   a new class is generated.
  15. '----------------------------------------------------------------------------
  16.  
  17. <<[H]TMDIClient [[TMDIClient]]
  18. ##{hheader.snp}
  19. ##<<TApplication QUERY_FILENAME_CPP [[FileName]]
  20. #include "[[FileName]].rh"            // Definition of all resources.
  21.  
  22.  
  23. //{{TMDIClient = [[TMDIClient]]}}
  24. class [[TMDIClient]] : public TMDIClient {
  25.   public:
  26.     int      ChildCount;                 // Number of child window created.
  27.  
  28.     [[TMDIClient]](TModule* module = 0);
  29.     virtual ~[[TMDIClient]]();
  30.  
  31.     void OpenFile(const char* fileName = 0);
  32.  
  33. ##--BEGIN-- !@OPT_APPL_DOCVIEW
  34. ##<<TMDIChild QUERY_CLASS_NAME [[ClientClass]]
  35. ##<<*ClientClass QUERY_BASE_NAME [[BaseClient]]
  36. ##BaseClient == "TListBox" 3
  37.   private:
  38.     void LoadTextFile();
  39.  
  40. ##--END-- !@OPT_APPL_DOCVIEW
  41. //{{[[TMDIClient]]VIRTUAL_BEGIN}}
  42.   protected:
  43. ##:DBVirtual(\\"[[TMDIClient]]", "SetupWindow")
  44.     virtual void SetupWindow();
  45. //{{[[TMDIClient]]VIRTUAL_END}}
  46.  
  47. //{{[[TMDIClient]]RSP_TBL_BEGIN}}
  48.   protected:
  49. ##!@OPT_APPL_DOCVIEW 3
  50.     void CmFileNew();
  51.     void CmFileOpen();
  52.     void CmFileClose();
  53. ##@OPT_APPL_PRINTING 4
  54.     void CmFilePrint();
  55.     void CmFilePrintSetup();
  56.     void CmFilePrintPreview();
  57.     void CmPrintEnable(TCommandEnabler& tce);
  58. ##@OPT_APPL_DRAGDROP
  59.     void EvDropFiles(TDropInfo);
  60. //{{[[TMDIClient]]RSP_TBL_END}}
  61. DECLARE_RESPONSE_TABLE([[TMDIClient]]);
  62. };    //{{[[TMDIClient]]}}
  63. ##{hfooter.snp}
  64. >>[H]TMDIClient
  65.  
  66.  
  67. '
  68. ' TMDIClient CPP file.
  69. '
  70. <<[CPP]TMDIClient [[TMDIClient]]
  71. ##{cheader.snp}
  72. #include <owl/pch.h>
  73.  
  74. ##@OPT_APPL_PRINTING && @OPT_APPL_DOCVIEW
  75. #include <owl/docmanag.h>
  76. #include <owl/listbox.h>
  77. #include <stdio.h>
  78.  
  79. ##<<TApplication QUERY_FILE_H [[FileName]]
  80. #include "[[FileName]]"
  81. ##--BEGIN-- !@OPT_APPL_DOCVIEW
  82. ##  --BEGIN-- @QUERY_APPL_MODEL == VALUE_MDI
  83. ##:     <<TMDIChild QUERY_WIND_CLIENT [[Client]]
  84. ##:     <<*Client QUERY_FILE_H [[FileName]]
  85. #include "[[FileName]]"
  86. ##  --END-- @QUERY_APPL_MODEL == VALUE_MDI
  87. ##--END-- !@OPT_APPL_DOCVIEW
  88. ##<<TMDIChild QUERY_FILE_H [[FileName]]
  89. #include "[[FileName]]"
  90. ##QUERY_FILE_H [[FileName]]
  91. #include "[[FileName]]"
  92. ##@OPT_APPL_PRINTING 2
  93. #include "apxprint.h"
  94. #include "apxprev.h"
  95.  
  96.  
  97. //{{[[TMDIClient]] Implementation}}
  98.  
  99.  
  100. ##@QUERY_APPL_COMMENT == VALUE_VERBOSE 4
  101. //
  102. // Build a response table for all messages/commands handled
  103. // by [[TMDIClient]] derived from TMDIClient.
  104. //
  105. DEFINE_RESPONSE_TABLE1([[TMDIClient]], TMDIClient)
  106. //{{[[TMDIClient]]RSP_TBL_BEGIN}}
  107. ##!@OPT_APPL_DOCVIEW 3
  108. ##:DBResponse(\\"[[TMDIClient]]", "CM_MDIFILENEW", "CmFileNew", "", "COMMAND")
  109. ##:DBResponse(\\"[[TMDIClient]]", "CM_MDIFILEOPEN", "CmFileOpen", "", "COMMAND")
  110. ##:DBResponse(\\"[[TMDIClient]]", "CM_FILECLOSE", "CmFileClose", "", "COMMAND")
  111.   EV_COMMAND(CM_MDIFILENEW, CmFileNew),
  112.   EV_COMMAND(CM_MDIFILEOPEN, CmFileOpen),
  113.   EV_COMMAND(CM_FILECLOSE, CmFileClose),
  114. ##@OPT_APPL_PRINTING 6
  115. ##:DBResponse(\\"[[TMDIClient]]", "CM_FILEPRINT", "CmFilePrint", "", "COMMAND")
  116. ##:DBResponse(\\"[[TMDIClient]]", "CM_FILEPRINTERSETUP", "CmFilePrintSetup", "", "COMMAND")
  117. ##:DBResponse(\\"[[TMDIClient]]", "CM_FILEPRINTPREVIEW", "CmFilePrintPreview", "", "COMMAND")
  118. ##:DBResponse(\\"[[TMDIClient]]", "CM_FILEPRINT", "CmPrintEnable", "", "ENABLER")
  119. ##:DBResponse(\\"[[TMDIClient]]", "CM_FILEPRINTERSETUP", "CmPrintEnable", "", "ENABLER")
  120. ##:DBResponse(\\"[[TMDIClient]]", "CM_FILEPRINTPREVIEW", "CmPrintEnable", "", "ENABLER")
  121.   EV_COMMAND(CM_FILEPRINT, CmFilePrint),
  122.   EV_COMMAND(CM_FILEPRINTERSETUP, CmFilePrintSetup),
  123.   EV_COMMAND(CM_FILEPRINTPREVIEW, CmFilePrintPreview),
  124.   EV_COMMAND_ENABLE(CM_FILEPRINT, CmPrintEnable),
  125.   EV_COMMAND_ENABLE(CM_FILEPRINTERSETUP, CmPrintEnable),
  126.   EV_COMMAND_ENABLE(CM_FILEPRINTPREVIEW, CmPrintEnable),
  127. ##@OPT_APPL_DRAGDROP
  128. ##:DBResponse(\\"[[TMDIClient]]", "", "", "WM_DROPFILES", "")
  129.   EV_WM_DROPFILES,
  130. //{{[[TMDIClient]]RSP_TBL_END}}
  131. END_RESPONSE_TABLE;
  132.  
  133.  
  134. ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  135. //--------------------------------------------------------
  136. // [[TMDIClient]]
  137. // ~~~~~~~~~~~
  138. // Construction/Destruction handling.
  139. //
  140. ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  141. [[TMDIClient]]::[[TMDIClient]](TModule* module)
  142. :
  143.   TMDIClient(module)
  144. {
  145. ##QUERY_WIND_STYLE [[StyleAttributes]]
  146. ##StyleAttributes != "" 3
  147.   // Override the default window style for TMDIClient.
  148. [[StyleAttributes]]
  149.  
  150. ##{wndbkgd.snp}
  151.   ChildCount = 0;
  152.  
  153.   // INSERT>> Your constructor code here.
  154.  
  155. }
  156.  
  157.  
  158. [[TMDIClient]]::~[[TMDIClient]]()
  159. {
  160.   Destroy();
  161.  
  162.   // INSERT>> Your destructor code here.
  163.  
  164. }
  165.  
  166.  
  167. ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  168. //--------------------------------------------------------
  169. // [[TMDIClient]]
  170. // ~~~~~~~~~~~
  171. // MDIClient site initialization.
  172. //
  173. ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  174. void [[TMDIClient]]::SetupWindow()
  175. {
  176.   // Default SetUpWindow processing.
  177.   //
  178.   TMDIClient::SetupWindow();
  179.  
  180. ##--BEGIN-- !@OPT_APPL_DOCVIEW
  181. ##<<TApplication QUERY_CLASS_NAME [[TApplication]]
  182.   [[TApplication]]* theApp = TYPESAFE_DOWNCAST(GetApplication(), [[TApplication]]);
  183.  
  184. ##@QUERY_APPL_COMMENT == VALUE_VERBOSE 3
  185.   // Common file file flags and filters for Open/Save As dialogs.  Filename and directory are
  186.   // computed in the member functions CmFileOpen, and CmFileSaveAs.
  187.   //
  188.   theApp->FileData.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;
  189. ##OPT_DV_RESET
  190. ##OPT_DV_NEXT
  191. ##QUERY_DV_DESCR [[Descr]]
  192. ##--BEGIN-- QUERY_DV_FILTER [[Filter]]
  193. ## (Filter != "*.*") || (Descr != "All Files")
  194.   theApp->FileData.SetFilter("[[Descr]] ([[Filter]])|[[Filter]]|All Files (*.*)|*.*|");
  195. ## (Filter == "*.*") && (Descr == "All Files")
  196.   theApp->FileData.SetFilter("All Files (*.*)|*.*|");
  197. ##QUERY_DV_EXT [[Ext]]
  198.   theApp->FileData.DefExt = "[[Ext]]";
  199.  
  200. ##--END-- QUERY_DV_FILTER [[Filter]]
  201. ##--END-- !@OPT_APPL_DOCVIEW
  202. ##@OPT_APPL_DRAGDROP 3
  203.   // Accept files via drag/drop in the client window.
  204.   //
  205.   DragAcceptFiles(true);
  206. }
  207.  
  208.  
  209. ##--BEGIN-- !@OPT_APPL_DOCVIEW
  210. ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  211. //--------------------------------------------------------
  212. // [[TMDIClient]]
  213. // ~~~~~~~~~~~
  214. // Menu File New command
  215. //
  216. ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  217. void [[TMDIClient]]::CmFileNew()
  218. {
  219. ##<<TMDIChild QUERY_WIND_CLIENT [[ClientClass]]
  220. ##--BEGIN-- <<*ClientClass QUERY_BASE_NAME [[BaseClient]]
  221. ##--BEGIN-- BaseClient != "TEditFile"
  222.   TAPointer<char> title = new char[255];
  223.   TAPointer<char> numberStr = new char[16];
  224.  
  225. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE 2
  226.   // Generate a title for the MDI child window.
  227.   //
  228.   if (GetModule()->LoadString(IDS_UNTITLED, title, sizeof title)) {
  229.     sprintf(numberStr, " - %d", ++ChildCount);
  230.     strcat(title, numberStr);
  231.   }
  232.   else
  233.     title[0] = '\0';
  234.  
  235. ##--END-- BaseClient != "TEditFile"
  236. ##--BEGIN-- BaseClient == "TEditFile"
  237.   TAPointer<char> title = new char[255];
  238.  
  239. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE 2
  240.   // Generate a title for the MDI child window.
  241.   //
  242.   sprintf(title, "%d", ++ChildCount);
  243.  
  244. ##--END-- BaseClient "TEditFile"
  245. ##--BEGIN-- <<TMDIChild QUERY_CLASS_NAME [[TMDIChild]]
  246. ##BaseClient == "TEditFile"
  247.   [[TMDIChild]]* child = new [[TMDIChild]](*this, title, 0);
  248. ##BaseClient == "TListBox"
  249.   [[TMDIChild]]* child = new [[TMDIChild]](*this, title, 0);
  250. ##BaseClient == "TWindow"
  251.   [[TMDIChild]]* child = new [[TMDIChild]](*this, title, 0);
  252. ##--END-- <<TMDIChild QUERY_CLASS_NAME [[TMDIChild]]
  253. ##--END-- <<*ClientClass QUERY_BASE_NAME [[BaseClient]]
  254.  
  255. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE 2
  256.   // Assign icons for this child window.
  257.   //
  258.   child->SetIcon(GetApplication(), IDI_DOC);
  259.   child->SetIconSm(GetApplication(), IDI_DOC);
  260.  
  261. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE 2
  262.   // If the current active MDI child is maximize then this one should be also.
  263.   //
  264. ##<<TMDIChild QUERY_CLASS_NAME [[TMDIChild]]
  265.   [[TMDIChild]]* curChild = ([[TMDIChild]] *)GetActiveMDIChild();
  266.   if (curChild && (curChild->GetWindowLong(GWL_STYLE) & WS_MAXIMIZE))
  267.     child->Attr.Style |= WS_MAXIMIZE;
  268.  
  269.   child->Create();
  270. }
  271.  
  272.  
  273. void [[TMDIClient]]::OpenFile(const char* fileName)
  274. {
  275. ##<<TApplication QUERY_CLASS_NAME [[TApplication]]
  276.   [[TApplication]]* theApp = TYPESAFE_DOWNCAST(GetApplication(), [[TApplication]]);
  277.  
  278.   if (fileName)
  279.     strcpy(theApp->FileData.FileName, fileName);
  280.  
  281. ##<<TMDIChild QUERY_WIND_CLIENT [[TMDIChildClient]]
  282.   // Create a MDIChild window whose client is [[TMDIChildClient]].
  283.   //
  284. ##<<TMDIChild QUERY_CLASS_NAME [[TMDIChild]]
  285. ##<<TMDIChild QUERY_WIND_CLIENT [[ClientClass]]
  286. ##<<*ClientClass QUERY_BASE_NAME [[BaseClient]]
  287. ##--BEGIN-- TRUE
  288. ##BaseClient == "TEditFile"
  289.   [[TMDIChild]]* child = new [[TMDIChild]](*this, "", new [[ClientClass]](0, 0, 0, 0, 0, 0, 0, theApp->FileData.FileName));
  290. ##BaseClient == "TListBox" 2
  291.   [[ClientClass]] far* client = new [[ClientClass]](0, 0, 0, 0, 100, 100);
  292.   [[TMDIChild]]* child = new [[TMDIChild]](*this, theApp->FileData.FileName, client);
  293. ##BaseClient == "TWindow"
  294.   [[TMDIChild]]* child = new [[TMDIChild]](*this, theApp->FileData.FileName, new [[ClientClass]](0));
  295. ##--END-- TRUE
  296.  
  297. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE 2
  298.   // Assign icons for this child window.
  299.   //
  300.   child->SetIcon(GetApplication(), IDI_DOC);
  301.   child->SetIconSm(GetApplication(), IDI_DOC);
  302.  
  303. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE 2
  304.   // If the current active MDI child is maximize then this one should be also.
  305.   //
  306. ##<<TMDIChild QUERY_CLASS_NAME [[TMDIChild]]
  307.   [[TMDIChild]]* curChild = ([[TMDIChild]] *)GetActiveMDIChild();
  308.   if (curChild && (curChild->GetWindowLong(GWL_STYLE) & WS_MAXIMIZE))
  309.     child->Attr.Style |= WS_MAXIMIZE;
  310.  
  311.   child->Create();
  312.  
  313. ##--BEGIN-- !@OPT_APPL_DOCVIEW
  314. ##<<TMDIChild QUERY_CLASS_NAME [[ClientClass]]
  315. ##<<*ClientClass QUERY_BASE_NAME [[BaseClient]]
  316. ##BaseClient == "TListBox" 2
  317.   LoadTextFile();
  318.  
  319. ##--END-- !@OPT_APPL_DOCVIEW
  320. ##--BEGIN-- @OPT_APPL_MRU
  321.  
  322. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE 2
  323.   // Add the file to the MRU list.
  324.   //
  325.   theApp->SaveMenuChoice(theApp->FileData.FileName);
  326. ##--END-- @OPT_APPL_MRU
  327. }
  328.  
  329.  
  330. ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  331. //--------------------------------------------------------
  332. // [[TMDIClient]]
  333. // ~~~~~~~~~~~
  334. // Menu File Open command
  335. //
  336. ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  337. void [[TMDIClient]]::CmFileOpen()
  338. {
  339. ##<<TApplication QUERY_CLASS_NAME [[TApplication]]
  340.   [[TApplication]]* theApp = TYPESAFE_DOWNCAST(GetApplication(), [[TApplication]]);
  341.  
  342. ##@QUERY_APPL_COMMENT == VALUE_VERBOSE 2
  343.   // Display standard Open dialog box to select a file name.
  344.   //
  345.   *(theApp->FileData.FileName) = 0;
  346.   if (TFileOpenDialog(this, theApp->FileData).Execute() == IDOK)
  347.     OpenFile();
  348. }
  349.  
  350.  
  351. ##<<TMDIChild QUERY_CLASS_NAME [[ClientClass]]
  352. ##<<*ClientClass QUERY_BASE_NAME [[BaseClient]]
  353. ##--BEGIN-- BaseClient == "TListBox"
  354. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE 2
  355. // Used by ListBox client to read a text file into the list box.
  356. //
  357. void [[TMDIClient]]::LoadTextFile()
  358. {
  359. ##<<TApplication QUERY_CLASS_NAME [[TApplication]]
  360.   [[TApplication]]* theApp = TYPESAFE_DOWNCAST(GetApplication(), [[TApplication]]);
  361.  
  362. ##<<TMDIChild QUERY_CLASS_NAME [[TMDIChild]]
  363.   [[TMDIChild]]*  curChild = ([[TMDIChild]] *)GetActiveMDIChild();
  364.   TListBox*       client = TYPESAFE_DOWNCAST(curChild->GetClientWindow(), TListBox);
  365.  
  366. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE 2
  367.   // Only work if the client class is a TListBox.
  368.   //
  369.   if (client) {
  370.     ifstream inStream(theApp->FileData.FileName);
  371.     TAPointer<char> buf = new char[255+1];
  372.  
  373.     client->ClearList();
  374.     while (inStream.good()) {
  375.       inStream.getline(buf, 255);
  376.       if (inStream.good())
  377.         client->AddString(buf);
  378.     }
  379.  
  380. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE 2
  381.     // Return an error message if we had a stream error and it wasn't the eof.
  382.     //
  383.     if (inStream.bad() && !inStream.eof()) {
  384.       string msgTemplate(*GetModule(), IDS_UNABLEREAD);
  385.       char*  msg = new char[_MAX_PATH + msgTemplate.length()];
  386.       sprintf(msg, msgTemplate.c_str(), *theApp->FileData.FileName);
  387.       MessageBox(msg, GetApplication()->GetName(), MB_ICONEXCLAMATION | MB_OK);
  388.       delete msg;
  389.     }
  390.   }
  391. }
  392.  
  393.  
  394. ##--END-- BaseClient == "TListBox"
  395. ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  396. //--------------------------------------------------------
  397. // [[TMDIClient]]
  398. // ~~~~~~~~~~~
  399. // Menu File Close command
  400. //
  401. ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  402. void [[TMDIClient]]::CmFileClose()
  403. {
  404. ##<<TMDIChild QUERY_CLASS_NAME [[ClientClass]]
  405.   [[ClientClass]]* curChild = ([[ClientClass]] *)GetActiveMDIChild();
  406.  
  407.   if (curChild) {
  408.     curChild->CloseWindow();
  409.   }
  410. }
  411.  
  412. ##--END-- !@OPT_APPL_DOCVIEW
  413. ##--BEGIN-- @OPT_APPL_PRINTING
  414. ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  415. //--------------------------------------------------------
  416. // [[TMDIClient]]
  417. // ~~~~~~~~~~
  418. // Menu File Print command
  419. //
  420. ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  421. void [[TMDIClient]]::CmFilePrint()
  422. {
  423. ##@QUERY_APPL_COMMENT == VALUE_VERBOSE 2
  424.   // Create Printer object if not already created.
  425.   //
  426. ##<<TApplication QUERY_CLASS_NAME [[TApplication]]
  427.   [[TApplication]]* theApp = TYPESAFE_DOWNCAST(GetApplication(), [[TApplication]]);
  428.   if (theApp) {
  429.     if (!theApp->Printer)
  430.       theApp->Printer = new TPrinter(theApp);
  431.  
  432.     TAPointer<char> docName = new char[_MAX_PATH];
  433.  
  434. ##--BEGIN-- @OPT_APPL_DOCVIEW
  435.     TDocument* currentDoc = theApp->GetDocManager()->GetCurrentDoc();
  436.     if (currentDoc->GetTitle())
  437.       strcpy(docName, currentDoc->GetTitle());
  438.     else
  439.       strcpy(docName, "Document");
  440.  
  441. ##--END-- @OPT_APPL_DOCVIEW
  442. ##!@OPT_APPL_DOCVIEW 2
  443.     GetActiveMDIChild()->GetWindowText(docName, _MAX_PATH);
  444.  
  445. ##@QUERY_APPL_COMMENT == VALUE_VERBOSE 2
  446.     // Create Printout window and set characteristics.
  447.     //
  448.     TApxPrintout printout(theApp->Printer, docName, GetActiveMDIChild()->GetClientWindow(), true);
  449.  
  450.     theApp->Printing++;
  451.  
  452. ##@QUERY_APPL_COMMENT == VALUE_VERBOSE 2
  453.     // Bring up the Print dialog and print the document.
  454.     //
  455.     theApp->Printer->Print(GetWindowPtr(GetActiveWindow()), printout, true);
  456.  
  457.     theApp->Printing--;
  458.   }
  459. }
  460.  
  461.  
  462. ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  463. //--------------------------------------------------------
  464. // [[TMDIClient]]
  465. // ~~~~~~~~~~
  466. // Menu File Print Setup command
  467. //
  468. ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  469. void [[TMDIClient]]::CmFilePrintSetup()
  470. {
  471. ##<<TApplication QUERY_CLASS_NAME [[TApplication]]
  472.   [[TApplication]]* theApp = TYPESAFE_DOWNCAST(GetApplication(), [[TApplication]]);
  473.   if (theApp) {
  474.     if (!theApp->Printer)
  475.       theApp->Printer = new TPrinter(theApp);
  476.  
  477. ##@QUERY_APPL_COMMENT == VALUE_VERBOSE 2
  478.     // Bring up the Print Setup dialog.
  479.     //
  480.     theApp->Printer->Setup(this);
  481.   }
  482. }
  483.  
  484.  
  485. ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  486. //--------------------------------------------------------
  487. // [[TMDIClient]]
  488. // ~~~~~~~~~~
  489. // Menu File Print Preview command
  490. //
  491. ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  492. void [[TMDIClient]]::CmFilePrintPreview()
  493. {
  494. ##<<TApplication QUERY_CLASS_NAME [[TApplication]]
  495.   [[TApplication]]* theApp = TYPESAFE_DOWNCAST(GetApplication(), [[TApplication]]);
  496.   if (theApp) {
  497.     if (!theApp->Printer)
  498.       theApp->Printer = new TPrinter(GetApplication());
  499.  
  500.     theApp->Printing++;
  501.  
  502.     TApxPreviewWin* prevW = new TApxPreviewWin(Parent, theApp->Printer, GetActiveMDIChild()->GetClientWindow(), "Print Preview", new TLayoutWindow(0));
  503.     prevW->Create();
  504.  
  505. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE 3
  506.     // Here we resize the preview window to take the size of the MainWindow, then
  507.     // hide the MainWindow.
  508.     //
  509.     TFrameWindow * mainWindow =  GetApplication()->GetMainWindow();
  510.     TRect r = mainWindow->GetWindowRect();
  511.     prevW->MoveWindow(r);
  512.     prevW->ShowWindow(SW_SHOWNORMAL);
  513.     mainWindow->ShowWindow(SW_HIDE);
  514.  
  515.     GetApplication()->BeginModal(GetApplication()->GetMainWindow());
  516.  
  517. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE 3
  518.     // After the user closes the preview Window, we take its size and use it
  519.     // to size the MainWindow, then show the MainWindow again.
  520.     //
  521.     r = prevW->GetWindowRect();
  522.     mainWindow->MoveWindow(r);
  523.     mainWindow->ShowWindow(SW_SHOWNORMAL);
  524.  
  525. ##:@QUERY_APPL_COMMENT == VALUE_VERBOSE 3
  526.     // We must destroy the preview window explicitly.  Otherwise, the window will
  527.     // not be destroyed until it's parent the MainWindow is destroyed.
  528.     //
  529.     prevW->Destroy();
  530.     delete prevW;
  531.  
  532.     theApp->Printing--;
  533.   }
  534. }
  535.  
  536.  
  537. ##--BEGIN-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  538. //--------------------------------------------------------
  539. // [[TMDIClient]]
  540. // ~~~~~~~~~~
  541. // Menu enabler used by Print, Print Setup and Print Preview.
  542. //
  543. ##--END-- @QUERY_APPL_COMMENT == VALUE_VERBOSE
  544. void [[TMDIClient]]::CmPrintEnable(TCommandEnabler& tce)
  545. {
  546.   if (GetActiveMDIChild()) {
  547. ##<<TApplication QUERY_CLASS_NAME [[TApplication]]
  548.     [[TApplication]]* theApp = TYPESAFE_DOWNCAST(GetApplication(), [[TApplication]]);
  549.     if (theApp) {
  550. ##@QUERY_APPL_COMMENT == VALUE_VERBOSE 4
  551.       // If we have a Printer already created just test if all is okay.
  552.       // Otherwise create a Printer object and make sure the printer really
  553.       // exists and then delete the Printer object.
  554.       //
  555.       if (!theApp->Printer) {
  556.         theApp->Printer = new TPrinter(theApp);
  557.         tce.Enable(!theApp->Printer->GetSetup().Error);
  558.       }
  559.       else
  560.         tce.Enable(!theApp->Printer->GetSetup().Error);
  561.     }
  562.   }
  563.   else
  564.     tce.Enable(false);
  565. }
  566.  
  567.  
  568. ##--END-- @OPT_APPL_PRINTING
  569. ##--BEGIN-- @OPT_APPL_DRAGDROP
  570. void [[TMDIClient]]::EvDropFiles(TDropInfo)
  571. {
  572.   Parent->ForwardMessage();
  573. }
  574. ##--END-- @OPT_APPL_DRAGDROP
  575. >>[CPP]TMDIClient
  576.